/*
 * Javassist, a Java-bytecode translator toolkit.
 * Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License.  Alternatively, the contents of this file may be used under
 * the terms of the GNU Lesser General Public License Version 2.1 or later,
 * or the Apache License Version 2.0.
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 */

package com.feilong.lib.javassist.bytecode;

/**
 * JVM Instruction Set.
 *
 * <p>
 * This interface defines opcodes and
 * array types for the NEWARRAY instruction.
 *
 * @see Mnemonic
 */
public interface Opcode{
    /* Opcodes */

    int   AALOAD          = 50;

    int   AASTORE         = 83;

    int   ACONST_NULL     = 1;

    int   ALOAD           = 25;

    int   ALOAD_0         = 42;

    int   ALOAD_1         = 43;

    int   ALOAD_2         = 44;

    int   ALOAD_3         = 45;

    int   ANEWARRAY       = 189;

    int   ARETURN         = 176;

    int   ARRAYLENGTH     = 190;

    int   ASTORE          = 58;

    int   ASTORE_0        = 75;

    int   ASTORE_1        = 76;

    int   ASTORE_2        = 77;

    int   ASTORE_3        = 78;

    int   ATHROW          = 191;

    int   BALOAD          = 51;

    int   BASTORE         = 84;

    int   BIPUSH          = 16;

    int   CALOAD          = 52;

    int   CASTORE         = 85;

    int   CHECKCAST       = 192;

    int   D2F             = 144;

    int   D2I             = 142;

    int   D2L             = 143;

    int   DADD            = 99;

    int   DALOAD          = 49;

    int   DASTORE         = 82;

    int   DCMPG           = 152;

    int   DCMPL           = 151;

    int   DCONST_0        = 14;

    int   DCONST_1        = 15;

    int   DDIV            = 111;

    int   DLOAD           = 24;

    int   DLOAD_0         = 38;

    int   DLOAD_1         = 39;

    int   DLOAD_2         = 40;

    int   DLOAD_3         = 41;

    int   DMUL            = 107;

    int   DNEG            = 119;

    int   DREM            = 115;

    int   DRETURN         = 175;

    int   DSTORE          = 57;

    int   DSTORE_0        = 71;

    int   DSTORE_1        = 72;

    int   DSTORE_2        = 73;

    int   DSTORE_3        = 74;

    int   DSUB            = 103;

    int   DUP             = 89;

    int   DUP2            = 92;

    int   DUP2_X1         = 93;

    int   DUP2_X2         = 94;

    int   DUP_X1          = 90;

    int   DUP_X2          = 91;

    int   F2D             = 141;

    int   F2I             = 139;

    int   F2L             = 140;

    int   FADD            = 98;

    int   FALOAD          = 48;

    int   FASTORE         = 81;

    int   FCMPG           = 150;

    int   FCMPL           = 149;

    int   FCONST_0        = 11;

    int   FCONST_1        = 12;

    int   FCONST_2        = 13;

    int   FDIV            = 110;

    int   FLOAD           = 23;

    int   FLOAD_0         = 34;

    int   FLOAD_1         = 35;

    int   FLOAD_2         = 36;

    int   FLOAD_3         = 37;

    int   FMUL            = 106;

    int   FNEG            = 118;

    int   FREM            = 114;

    int   FRETURN         = 174;

    int   FSTORE          = 56;

    int   FSTORE_0        = 67;

    int   FSTORE_1        = 68;

    int   FSTORE_2        = 69;

    int   FSTORE_3        = 70;

    int   FSUB            = 102;

    int   GETFIELD        = 180;

    int   GETSTATIC       = 178;

    int   GOTO            = 167;

    int   GOTO_W          = 200;

    int   I2B             = 145;

    int   I2C             = 146;

    int   I2D             = 135;

    int   I2F             = 134;

    int   I2L             = 133;

    int   I2S             = 147;

    int   IADD            = 96;

    int   IALOAD          = 46;

    int   IAND            = 126;

    int   IASTORE         = 79;

    int   ICONST_0        = 3;

    int   ICONST_1        = 4;

    int   ICONST_2        = 5;

    int   ICONST_3        = 6;

    int   ICONST_4        = 7;

    int   ICONST_5        = 8;

    int   ICONST_M1       = 2;

    int   IDIV            = 108;

    int   IFEQ            = 153;

    int   IFGE            = 156;

    int   IFGT            = 157;

    int   IFLE            = 158;

    int   IFLT            = 155;

    int   IFNE            = 154;

    int   IFNONNULL       = 199;

    int   IFNULL          = 198;

    int   IF_ACMPEQ       = 165;

    int   IF_ACMPNE       = 166;

    int   IF_ICMPEQ       = 159;

    int   IF_ICMPGE       = 162;

    int   IF_ICMPGT       = 163;

    int   IF_ICMPLE       = 164;

    int   IF_ICMPLT       = 161;

    int   IF_ICMPNE       = 160;

    int   IINC            = 132;

    int   ILOAD           = 21;

    int   ILOAD_0         = 26;

    int   ILOAD_1         = 27;

    int   ILOAD_2         = 28;

    int   ILOAD_3         = 29;

    int   IMUL            = 104;

    int   INEG            = 116;

    int   INSTANCEOF      = 193;

    int   INVOKEDYNAMIC   = 186;

    int   INVOKEINTERFACE = 185;

    int   INVOKESPECIAL   = 183;

    int   INVOKESTATIC    = 184;

    int   INVOKEVIRTUAL   = 182;

    int   IOR             = 128;

    int   IREM            = 112;

    int   IRETURN         = 172;

    int   ISHL            = 120;

    int   ISHR            = 122;

    int   ISTORE          = 54;

    int   ISTORE_0        = 59;

    int   ISTORE_1        = 60;

    int   ISTORE_2        = 61;

    int   ISTORE_3        = 62;

    int   ISUB            = 100;

    int   IUSHR           = 124;

    int   IXOR            = 130;

    int   JSR             = 168;

    int   JSR_W           = 201;

    int   L2D             = 138;

    int   L2F             = 137;

    int   L2I             = 136;

    int   LADD            = 97;

    int   LALOAD          = 47;

    int   LAND            = 127;

    int   LASTORE         = 80;

    int   LCMP            = 148;

    int   LCONST_0        = 9;

    int   LCONST_1        = 10;

    int   LDC             = 18;

    int   LDC2_W          = 20;

    int   LDC_W           = 19;

    int   LDIV            = 109;

    int   LLOAD           = 22;

    int   LLOAD_0         = 30;

    int   LLOAD_1         = 31;

    int   LLOAD_2         = 32;

    int   LLOAD_3         = 33;

    int   LMUL            = 105;

    int   LNEG            = 117;

    int   LOOKUPSWITCH    = 171;

    int   LOR             = 129;

    int   LREM            = 113;

    int   LRETURN         = 173;

    int   LSHL            = 121;

    int   LSHR            = 123;

    int   LSTORE          = 55;

    int   LSTORE_0        = 63;

    int   LSTORE_1        = 64;

    int   LSTORE_2        = 65;

    int   LSTORE_3        = 66;

    int   LSUB            = 101;

    int   LUSHR           = 125;

    int   LXOR            = 131;

    int   MONITORENTER    = 194;

    int   MONITOREXIT     = 195;

    int   MULTIANEWARRAY  = 197;

    int   NEW             = 187;

    int   NEWARRAY        = 188;

    int   NOP             = 0;

    int   POP             = 87;

    int   POP2            = 88;

    int   PUTFIELD        = 181;

    int   PUTSTATIC       = 179;

    int   RET             = 169;

    int   RETURN          = 177;

    int   SALOAD          = 53;

    int   SASTORE         = 86;

    int   SIPUSH          = 17;

    int   SWAP            = 95;

    int   TABLESWITCH     = 170;

    int   WIDE            = 196;

    /* array-type code for the newarray instruction */

    int   T_BOOLEAN       = 4;

    int   T_CHAR          = 5;

    int   T_FLOAT         = 6;

    int   T_DOUBLE        = 7;

    int   T_BYTE          = 8;

    int   T_SHORT         = 9;

    int   T_INT           = 10;

    int   T_LONG          = 11;

    /* how many values are pushed on the operand stack. */
    int[] STACK_GROW      = {
                              0,                                                             // nop, 0
                              1,                                                             // aconst_null, 1
                              1,                                                             // iconst_m1, 2
                              1,                                                             // iconst_0, 3
                              1,                                                             // iconst_1, 4
                              1,                                                             // iconst_2, 5
                              1,                                                             // iconst_3, 6
                              1,                                                             // iconst_4, 7
                              1,                                                             // iconst_5, 8
                              2,                                                             // lconst_0, 9
                              2,                                                             // lconst_1, 10
                              1,                                                             // fconst_0, 11
                              1,                                                             // fconst_1, 12
                              1,                                                             // fconst_2, 13
                              2,                                                             // dconst_0, 14
                              2,                                                             // dconst_1, 15
                              1,                                                             // bipush, 16
                              1,                                                             // sipush, 17
                              1,                                                             // ldc, 18
                              1,                                                             // ldc_w, 19
                              2,                                                             // ldc2_w, 20
                              1,                                                             // iload, 21
                              2,                                                             // lload, 22
                              1,                                                             // fload, 23
                              2,                                                             // dload, 24
                              1,                                                             // aload, 25
                              1,                                                             // iload_0, 26
                              1,                                                             // iload_1, 27
                              1,                                                             // iload_2, 28
                              1,                                                             // iload_3, 29
                              2,                                                             // lload_0, 30
                              2,                                                             // lload_1, 31
                              2,                                                             // lload_2, 32
                              2,                                                             // lload_3, 33
                              1,                                                             // fload_0, 34
                              1,                                                             // fload_1, 35
                              1,                                                             // fload_2, 36
                              1,                                                             // fload_3, 37
                              2,                                                             // dload_0, 38
                              2,                                                             // dload_1, 39
                              2,                                                             // dload_2, 40
                              2,                                                             // dload_3, 41
                              1,                                                             // aload_0, 42
                              1,                                                             // aload_1, 43
                              1,                                                             // aload_2, 44
                              1,                                                             // aload_3, 45
                              -1,                                                            // iaload, 46
                              0,                                                             // laload, 47
                              -1,                                                            // faload, 48
                              0,                                                             // daload, 49
                              -1,                                                            // aaload, 50
                              -1,                                                            // baload, 51
                              -1,                                                            // caload, 52
                              -1,                                                            // saload, 53
                              -1,                                                            // istore, 54
                              -2,                                                            // lstore, 55
                              -1,                                                            // fstore, 56
                              -2,                                                            // dstore, 57
                              -1,                                                            // astore, 58
                              -1,                                                            // istore_0, 59
                              -1,                                                            // istore_1, 60
                              -1,                                                            // istore_2, 61
                              -1,                                                            // istore_3, 62
                              -2,                                                            // lstore_0, 63
                              -2,                                                            // lstore_1, 64
                              -2,                                                            // lstore_2, 65
                              -2,                                                            // lstore_3, 66
                              -1,                                                            // fstore_0, 67
                              -1,                                                            // fstore_1, 68
                              -1,                                                            // fstore_2, 69
                              -1,                                                            // fstore_3, 70
                              -2,                                                            // dstore_0, 71
                              -2,                                                            // dstore_1, 72
                              -2,                                                            // dstore_2, 73
                              -2,                                                            // dstore_3, 74
                              -1,                                                            // astore_0, 75
                              -1,                                                            // astore_1, 76
                              -1,                                                            // astore_2, 77
                              -1,                                                            // astore_3, 78
                              -3,                                                            // iastore, 79
                              -4,                                                            // lastore, 80
                              -3,                                                            // fastore, 81
                              -4,                                                            // dastore, 82
                              -3,                                                            // aastore, 83
                              -3,                                                            // bastore, 84
                              -3,                                                            // castore, 85
                              -3,                                                            // sastore, 86
                              -1,                                                            // pop, 87
                              -2,                                                            // pop2, 88
                              1,                                                             // dup, 89
                              1,                                                             // dup_x1, 90
                              1,                                                             // dup_x2, 91
                              2,                                                             // dup2, 92
                              2,                                                             // dup2_x1, 93
                              2,                                                             // dup2_x2, 94
                              0,                                                             // swap, 95
                              -1,                                                            // iadd, 96
                              -2,                                                            // ladd, 97
                              -1,                                                            // fadd, 98
                              -2,                                                            // dadd, 99
                              -1,                                                            // isub, 100
                              -2,                                                            // lsub, 101
                              -1,                                                            // fsub, 102
                              -2,                                                            // dsub, 103
                              -1,                                                            // imul, 104
                              -2,                                                            // lmul, 105
                              -1,                                                            // fmul, 106
                              -2,                                                            // dmul, 107
                              -1,                                                            // idiv, 108
                              -2,                                                            // ldiv, 109
                              -1,                                                            // fdiv, 110
                              -2,                                                            // ddiv, 111
                              -1,                                                            // irem, 112
                              -2,                                                            // lrem, 113
                              -1,                                                            // frem, 114
                              -2,                                                            // drem, 115
                              0,                                                             // ineg, 116
                              0,                                                             // lneg, 117
                              0,                                                             // fneg, 118
                              0,                                                             // dneg, 119
                              -1,                                                            // ishl, 120
                              -1,                                                            // lshl, 121
                              -1,                                                            // ishr, 122
                              -1,                                                            // lshr, 123
                              -1,                                                            // iushr, 124
                              -1,                                                            // lushr, 125
                              -1,                                                            // iand, 126
                              -2,                                                            // land, 127
                              -1,                                                            // ior, 128
                              -2,                                                            // lor, 129
                              -1,                                                            // ixor, 130
                              -2,                                                            // lxor, 131
                              0,                                                             // iinc, 132
                              1,                                                             // i2l, 133
                              0,                                                             // i2f, 134
                              1,                                                             // i2d, 135
                              -1,                                                            // l2i, 136
                              -1,                                                            // l2f, 137
                              0,                                                             // l2d, 138
                              0,                                                             // f2i, 139
                              1,                                                             // f2l, 140
                              1,                                                             // f2d, 141
                              -1,                                                            // d2i, 142
                              0,                                                             // d2l, 143
                              -1,                                                            // d2f, 144
                              0,                                                             // i2b, 145
                              0,                                                             // i2c, 146
                              0,                                                             // i2s, 147
                              -3,                                                            // lcmp, 148
                              -1,                                                            // fcmpl, 149
                              -1,                                                            // fcmpg, 150
                              -3,                                                            // dcmpl, 151
                              -3,                                                            // dcmpg, 152
                              -1,                                                            // ifeq, 153
                              -1,                                                            // ifne, 154
                              -1,                                                            // iflt, 155
                              -1,                                                            // ifge, 156
                              -1,                                                            // ifgt, 157
                              -1,                                                            // ifle, 158
                              -2,                                                            // if_icmpeq, 159
                              -2,                                                            // if_icmpne, 160
                              -2,                                                            // if_icmplt, 161
                              -2,                                                            // if_icmpge, 162
                              -2,                                                            // if_icmpgt, 163
                              -2,                                                            // if_icmple, 164
                              -2,                                                            // if_acmpeq, 165
                              -2,                                                            // if_acmpne, 166
                              0,                                                             // goto, 167
                              1,                                                             // jsr, 168
                              0,                                                             // ret, 169
                              -1,                                                            // tableswitch, 170
                              -1,                                                            // lookupswitch, 171
                              -1,                                                            // ireturn, 172
                              -2,                                                            // lreturn, 173
                              -1,                                                            // freturn, 174
                              -2,                                                            // dreturn, 175
                              -1,                                                            // areturn, 176
                              0,                                                             // return, 177
                              0,                                                             // getstatic, 178            depends on the type
                              0,                                                             // putstatic, 179            depends on the type
                              0,                                                             // getfield, 180             depends on the type
                              0,                                                             // putfield, 181             depends on the type
                              0,                                                             // invokevirtual, 182        depends on the type
                              0,                                                             // invokespecial, 183        depends on the type
                              0,                                                             // invokestatic, 184         depends on the type
                              0,                                                             // invokeinterface, 185      depends on the type
                              0,                                                             // invokedynaimc, 186        depends on the type
                              1,                                                             // new, 187
                              0,                                                             // newarray, 188
                              0,                                                             // anewarray, 189
                              0,                                                             // arraylength, 190
                              -1,                                                            // athrow, 191              stack is cleared
                              0,                                                             // checkcast, 192
                              0,                                                             // instanceof, 193
                              -1,                                                            // monitorenter, 194
                              -1,                                                            // monitorexit, 195
                              0,                                                             // wide, 196                 depends on the following opcode
                              0,                                                             // multianewarray, 197       depends on the dimensions
                              -1,                                                            // ifnull, 198
                              -1,                                                            // ifnonnull, 199
                              0,                                                             // goto_w, 200
                              1                                                              // jsr_w, 201
    };
}
